<?php
/**
 * Clase Base DP para BaseSoClienteDP
 *
 * @package    
 * @subpackage BaseSoClienteDP
 * @author     hans
 * @version    SVN:: BaseSoClienteDP.class.php,v 1.1 2012-03-18 20:40:27 Hans.parra Exp $
 */


require_once('class/common/arrayClass.class.php');
require_once('class/so/clientes/BN/SoClienteBN.class.php');


abstract class BaseSoClienteDP extends SoClienteBN
{
  /* N�mero de registros afectados */
  private $nRowsAffected;

  public function __construct($bSetDefault = true)
  {
    if( $bSetDefault instanceof SoClienteBN )
    {
      $o_SoClienteBN = $bSetDefault;
      if($o_SoClienteBN->getClienteId()) : $this->setClienteId($o_SoClienteBN->getClienteId()); endif;
      if($o_SoClienteBN->getTipo()) : $this->setTipo($o_SoClienteBN->getTipo()); endif;
      if($o_SoClienteBN->getNombre()) : $this->setNombre($o_SoClienteBN->getNombre()); endif;
      if($o_SoClienteBN->getDocIdent()) : $this->setDocIdent($o_SoClienteBN->getDocIdent()); endif;
      if($o_SoClienteBN->getNacExt()) : $this->setNacExt($o_SoClienteBN->getNacExt()); endif;
      if($o_SoClienteBN->getDirecc1()) : $this->setDirecc1($o_SoClienteBN->getDirecc1()); endif;
      if($o_SoClienteBN->getDirecc2()) : $this->setDirecc2($o_SoClienteBN->getDirecc2()); endif;
      if($o_SoClienteBN->getCiudad()) : $this->setCiudad($o_SoClienteBN->getCiudad()); endif;
      if($o_SoClienteBN->getDireccEstado()) : $this->setDireccEstado($o_SoClienteBN->getDireccEstado()); endif;
      if($o_SoClienteBN->getPais()) : $this->setPais($o_SoClienteBN->getPais()); endif;
      if($o_SoClienteBN->getCodPostal()) : $this->setCodPostal($o_SoClienteBN->getCodPostal()); endif;
      if($o_SoClienteBN->getTelefono()) : $this->setTelefono($o_SoClienteBN->getTelefono()); endif;      
      if($o_SoClienteBN->getTelefono2()) : $this->setTelefono2($o_SoClienteBN->getTelefono2()); endif;
      if($o_SoClienteBN->getEmail()) : $this->setEmail($o_SoClienteBN->getEmail()); endif;
      if($o_SoClienteBN->getContacto()) : $this->setContacto($o_SoClienteBN->getContacto()); endif;
      if($o_SoClienteBN->getVendedor()) : $this->setVendedor($o_SoClienteBN->getVendedor()); endif;
      if($o_SoClienteBN->getTerminosPago()) : $this->setTerminosPago($o_SoClienteBN->getTerminosPago()); endif;
      if($o_SoClienteBN->getPlazoDiasPago()) : $this->setPlazoDiasPago($o_SoClienteBN->getPlazoDiasPago()); endif;
      if($o_SoClienteBN->getInicioFecha()) : $this->setInicioFecha($o_SoClienteBN->getInicioFecha()); endif;
      if($o_SoClienteBN->getObservacion()) : $this->setObservacion($o_SoClienteBN->getObservacion()); endif;
      if($o_SoClienteBN->getEstado()) : $this->setEstado($o_SoClienteBN->getEstado()); endif;
      if($o_SoClienteBN->getCreaUsr()) : $this->setCreaUsr($o_SoClienteBN->getCreaUsr()); endif;
      if($o_SoClienteBN->getCreaFecha()) : $this->setCreaFecha($o_SoClienteBN->getCreaFecha()); endif;
      if($o_SoClienteBN->getModifUsr()) : $this->setModifUsr($o_SoClienteBN->getModifUsr()); endif;
      if($o_SoClienteBN->getModifFecha()) : $this->setModifFecha($o_SoClienteBN->getModifFecha()); endif;
    }
  }

  /* Obtiene el n�mero de registros afectados */
  public function getRowsAffected()
  {
    return $this->nRowsAffected;
  }

  public function save()
  {
    try
    {
      $o_conexion = new BaseDatos();
      $con = $o_conexion->conectar();
      $sql = "SELECT IF(MAX(cli_clienteId),(MAX(cli_clienteId)+1), 1) AS Maximo FROM so_cliente;";
      $result = mysql_query($sql);
      $row = mysql_fetch_array($result);
      $this->setClienteId($row[0]);

      if($this->getClienteId()){
        $a_Fields = array();

        if($this->getClienteId()) : $a_Fields['cli_clienteId'] = ($this->getClienteId()); endif;
        if($this->getTipo()) : $a_Fields['cli_tipo'] = ($this->getTipo()); endif;
        if($this->getNombre()) : $a_Fields['cli_nombre'] = ($this->getNombre()); endif;
        if($this->getDocIdent()) : $a_Fields['cli_docIdent'] = ($this->getDocIdent()); endif;
        if($this->getNacExt()) : $a_Fields['cli_nacExt'] = ($this->getNacExt()); endif;
        if($this->getDirecc1()) : $a_Fields['cli_direcc1'] = ($this->getDirecc1()); endif;
        if($this->getDirecc2()) : $a_Fields['cli_direcc2'] = ($this->getDirecc2()); endif;
        if($this->getCiudad()) : $a_Fields['cli_ciudad'] = ($this->getCiudad()); endif;
        if($this->getDireccEstado()) : $a_Fields['cli_direccEstado'] = ($this->getDireccEstado()); endif;
        if($this->getPais()) : $a_Fields['cli_pais'] = ($this->getPais()); endif;
        if($this->getCodPostal()) : $a_Fields['cli_codPostal'] = ($this->getCodPostal()); endif;
        if($this->getTelefono()) : $a_Fields['cli_telefono2'] = ($this->getTelefono()); endif;        
        if($this->getTelefono2()) : $a_Fields['cli_telefono2'] = ($this->getTelefono2()); endif;
        if($this->getEmail()) : $a_Fields['cli_email'] = ($this->getEmail()); endif;
        if($this->getContacto()) : $a_Fields['cli_contacto'] = ($this->getContacto()); endif;
        if($this->getVendedor()) : $a_Fields['cli_vendedor'] = ($this->getVendedor()); endif;
        if($this->getTerminosPago()) : $a_Fields['cli_terminosPago'] = ($this->getTerminosPago()); endif;
        if($this->getPlazoDiasPago()) : $a_Fields['cli_plazoDiasPago'] = ($this->getPlazoDiasPago()); endif;
        if($this->getInicioFecha()) : $a_Fields['cli_inicioFecha'] = ($this->getInicioFecha()); endif;
        if($this->getObservacion()) : $a_Fields['cli_observacion'] = ($this->getObservacion()); endif;
        if($this->getEstado()) : $a_Fields['cli_estado'] = ($this->getEstado()); endif;
        if($this->getCreaUsr()) : $a_Fields['cli_creaUsr'] = ($this->getCreaUsr()); endif;
        if($this->getCreaFecha()) : $a_Fields['cli_creaFecha'] = ($this->getCreaFecha()); endif;
        if($this->getModifUsr()) : $a_Fields['cli_modifUsr'] = ($this->getModifUsr()); endif;
        if($this->getModifFecha()) : $a_Fields['cli_modifFecha'] = ($this->getModifFecha()); endif;

        $sStringField = arrayClass::implode_keys(',', $a_Fields);
        $sStringValue = "'".implode("','", $a_Fields)."'";

        $sql = "INSERT INTO so_cliente (".$sStringField.") VALUES (".$sStringValue.");";
        echo $sql;
        $result = mysql_query($sql);
        if($result)
        {
          $this->nRowsAffected = (int) mysql_affected_rows($oLink);
        }
        else
        {
          throw new Exception( mysql_error() );
        }
      }
      else
      {
        throw new Exception( 'El id no esta registrado.');
      }
    }
    catch ( Exception $o_Error )
    {
      throw new Exception($o_Error->getMessage().' en '.$o_Error->getFile().' linea '.$o_Error->getLine());
    }
    return true;
  }

  public function update()
  {
    try
    {
      if($this->getClienteId())
      {
        $a_Fields = array();

        if($this->getClienteId()) : $a_Fields['cli_clienteId'] = ($this->getClienteId()); endif;
        if($this->getTipo()) : $a_Fields['cli_tipo'] = ($this->getTipo()); endif;
        if($this->getNombre()) : $a_Fields['cli_nombre'] = ($this->getNombre()); endif;
        if($this->getDocIdent()) : $a_Fields['cli_docIdent'] = ($this->getDocIdent()); endif;
        if($this->getNacExt()) : $a_Fields['cli_nacExt'] = ($this->getNacExt()); endif;
        if($this->getDirecc1()) : $a_Fields['cli_direcc1'] = ($this->getDirecc1()); endif;
        if($this->getDirecc2()) : $a_Fields['cli_direcc2'] = ($this->getDirecc2()); endif;
        if($this->getCiudad()) : $a_Fields['cli_ciudad'] = ($this->getCiudad()); endif;
        if($this->getDireccEstado()) : $a_Fields['cli_direccEstado'] = ($this->getDireccEstado()); endif;
        if($this->getPais()) : $a_Fields['cli_pais'] = ($this->getPais()); endif;
        if($this->getCodPostal()) : $a_Fields['cli_codPostal'] = ($this->getCodPostal()); endif;
        if($this->getTelefono()) : $a_Fields['cli_telefono'] = ($this->getTelefono()); endif;        
        if($this->getTelefono2()) : $a_Fields['cli_telefono2'] = ($this->getTelefono2()); endif;
        if($this->getEmail()) : $a_Fields['cli_email'] = ($this->getEmail()); endif;
        if($this->getContacto()) : $a_Fields['cli_contacto'] = ($this->getContacto()); endif;
        if($this->getVendedor()) : $a_Fields['cli_vendedor'] = ($this->getVendedor()); endif;
        if($this->getTerminosPago()) : $a_Fields['cli_terminosPago'] = ($this->getTerminosPago()); endif;
        if($this->getPlazoDiasPago()) : $a_Fields['cli_plazoDiasPago'] = ($this->getPlazoDiasPago()); endif;
        if($this->getInicioFecha()) : $a_Fields['cli_inicioFecha'] = ($this->getInicioFecha()); endif;
        if($this->getObservacion()) : $a_Fields['cli_observacion'] = ($this->getObservacion()); endif;
        if($this->getEstado()) : $a_Fields['cli_estado'] = ($this->getEstado()); endif;
        if($this->getCreaUsr()) : $a_Fields['cli_creaUsr'] = ($this->getCreaUsr()); endif;
        if($this->getCreaFecha()) : $a_Fields['cli_creaFecha'] = ($this->getCreaFecha()); endif;
        if($this->getModifUsr()) : $a_Fields['cli_modifUsr'] = ($this->getModifUsr()); endif;
        if($this->getModifFecha()) : $a_Fields['cli_modifFecha'] = ($this->getModifFecha()); endif;

        $sStringField = arrayClass::implode_key_value(',', $a_Fields);

        $o_conexion = new BaseDatos();
        $con = $o_conexion->conectar();
        $sql = "UPDATE so_cliente SET ".$sStringField." WHERE 1 AND cli_clienteId='".$this->getClienteId()."';";
        $result = mysql_query($sql);
        if($result)
        {
          $this->nRowsAffected = (int) mysql_affected_rows($oLink);
        }
        else
        {
          throw new Exception( mysql_error() );
        }
      }
      else
      {
        throw new Exception( 'El id no esta registrado.');
      }
    }
    catch ( Exception $o_Error )
    {
      throw new Exception($o_Error->getMessage().' en '.$o_Error->getFile().' linea '.$o_Error->getLine());
    }
    return true;
  }

  public function delete()
  {
    try
    {
      if($this->getClienteId())
      {
        $a_Fields = array();

        $o_conexion = new BaseDatos();
        $con = $o_conexion->conectar();
        $sql = "DELETE FROM so_cliente WHERE 1 AND cli_clienteId='".$this->getClienteId()."';"; 
        $result = mysql_query($sql);
        if($result)
        {
          $this->nRowsAffected = (int) mysql_affected_rows($oLink);
        }
        else
        {
          throw new Exception( mysql_error($oLink) );
        }
      }
      else
      {
        throw new Exception( 'El id no esta registrado.');
      }
    }
    catch ( Exception $o_Error )
    {
      throw new Exception($o_Error->getMessage().' en '.$o_Error->getFile().' linea '.$o_Error->getLine());
    }
    return true;
  }

  /* B�squeda del registro por la llave primaria */
  public static function selectByPK($vClienteId, $vTipo, $vNombre, $vDocIdent, $vNacExt, $vDirecc1, $vDirecc2, $vCiudad, $vDireccEstado, $vPais, $vCodPostal, $vTelefono2, $vEmail, $vContacto, $vVendedor, $vTerminosPago, $vPlazoDiasPago, $vInicioFecha, $vObservacion, $vEstado, $vCreaUsr, $vCreaFecha, $vModifUsr, $vModifFecha)
  {
    try
    {
      $o_conexion = new BaseDatos();
      $con = $o_conexion->conectar();
      $sql = "SELECT cli_clienteId, cli_tipo, cli_nombre, cli_docIdent, cli_nacExt, cli_direcc1, cli_direcc2, cli_ciudad, cli_direccEstado, cli_pais, cli_telefono, cli_telefono2, cli_email, cli_contacto, cli_vendedor, cli_terminosPago, cli_plazoDiasPago, cli_inicioFecha, cli_observacion, cli_estado, cli_creaUsr, cli_creaFecha, cli_modifUsr, cli_modifFecha FROM so_cliente WHERE 1 AND cli_clienteId='".$vClienteId."'; ";      
      $result = mysql_query($sql);
      $o_Propel = $result ? mysql_fetch_object($result) : null;
      
      return $o_Propel?self::insertObjectBN($o_Propel):null;

    }catch ( Exception $o_Error ){
      throw new Exception($o_Error->getMessage().' en '.$o_Error->getFile().' linea '.$o_Error->getLine());
    }
  }

  /* Devuelve un objeto con m�todos de acceso */
  private function insertObjectBN($o_propel){
    $o_SoClienteDP = new SoClienteBN();
    $o_SoClienteDP->setClienteId($o_propel->cli_clienteId);
    $o_SoClienteDP->setTipo($o_propel->cli_tipo);
    $o_SoClienteDP->setNombre($o_propel->cli_nombre);
    $o_SoClienteDP->setDocIdent($o_propel->cli_docIdent);
    $o_SoClienteDP->setNacExt($o_propel->cli_nacExt);
    $o_SoClienteDP->setDirecc1($o_propel->cli_direcc1);
    $o_SoClienteDP->setDirecc2($o_propel->cli_direcc2);
    $o_SoClienteDP->setCiudad($o_propel->cli_ciudad);
    $o_SoClienteDP->setDireccEstado($o_propel->cli_direccEstado);
    $o_SoClienteDP->setPais($o_propel->cli_pais);
    $o_SoClienteDP->setCodPostal($o_propel->cli_telefono);
    $o_SoClienteDP->setTelefono($o_propel->cli_telefono);    
    $o_SoClienteDP->setTelefono2($o_propel->cli_telefono2);
    $o_SoClienteDP->setEmail($o_propel->cli_email);
    $o_SoClienteDP->setContacto($o_propel->cli_contacto);
    $o_SoClienteDP->setVendedor($o_propel->cli_vendedor);
    $o_SoClienteDP->setTerminosPago($o_propel->cli_terminosPago);
    $o_SoClienteDP->setPlazoDiasPago($o_propel->cli_plazoDiasPago);
    $o_SoClienteDP->setInicioFecha($o_propel->cli_inicioFecha);
    $o_SoClienteDP->setObservacion($o_propel->cli_observacion);
    $o_SoClienteDP->setEstado($o_propel->cli_estado);
    $o_SoClienteDP->setCreaUsr($o_propel->cli_creaUsr);
    $o_SoClienteDP->setCreaFecha($o_propel->cli_creaFecha);
    $o_SoClienteDP->setModifUsr($o_propel->cli_modifUsr);
    $o_SoClienteDP->setModifFecha($o_propel->cli_modifFecha);
    return $o_SoClienteDP;
  }
}